// 初始化 axios实例
import axios from 'axios'
import config from './config'
import router from '../router'



// 对外暴露出请求方法
export default function request(options) {
    return new Promise((resolve, reject)=>{
        // 声明一个实例化的axios对象并赋给 instance 变量
        const instance = axios.create({
            ...config
        })

        // 请求拦截器
        instance.interceptors.request.use(
            (config)=>{
                // 1. 取token
                let token = localStorage.getItem("pm_token")
                // 2. 判断token的逻辑，有，添加到header，没有，去到登录页
                if (token) {
                    config.headers.token = token
                } else{
                    router.push('/login')
                }
                // 3. return config
                return config
            },
            (error) =>{
                console.log('request error', error);
                // 判断请求超时
                if (error.code === 'ECONNABORTED' 
                && error.message.indexOf("timeout") !== -1) {
                    ElMessage({
                        message:'请求超时',
                        type:'error',
                        showClose: true
                    })
                }
            }
        )

        // 响应拦截器
        instance.interceptors.response.use(
            (response)=>{
                console.log('response');
                return response.data
            },
            (err)=>{
                if (err && err.response) {
                    switch (err.response.status) {
                        case 400:
                            err.message = "请求错误"
                            break;
                        // ...
                        default:
                            break;
                    }
                }

                console.error(err)

                if (err.message) {
                    ElMessage({
                        message:err.message,
                        type: "error",
                        showClose:true
                    })
                }

                return Promise.reject(err)
            }
        )


        // 处理正确逻辑
        instance(options)
        .then((res)=>{

            if (res.code === 200) {
                resolve(res)
            } else {
                // 未登录
                if (res.code === -2) {
                    router.push("/login")
                }
                ElMessage({
                    message:res.msg || "操作失败",
                    type:'error',
                    showClose:true
                })
                reject(res)
            }
        })
        .catch(error=>{
            reject(error)
        })
    })
}